import { EzFormValidatorFn } from '../../utils';
import { EzFormGroup } from '../ez-form-group';
import { EzForm } from '../ez-form/ez-form';
import { EzFormControl } from './ez-form-control';
/**
 * 表单控件事件回调函数
 */
export declare type EzFormControlEventFn<C extends EzFormControl = EzFormControl> = (
  control?: C,
  group?: EzFormGroup,
  form?: EzForm
) => void;

/**
 * 表单控件配置项
 */
export interface EzFormControlConfiguration<V = any, C extends EzFormControl = EzFormControl> {
  /**
   * 控件类型
   *
   * `input` 文本输入控件
   * `number` 数值输入控件
   * `radio` 单选钮输入控件
   * `select` 下拉选择控件
   * `checkbox` 复选框输入控件
   * `datepicker` 日期选择器
   * `timepicker` 时间选择器
   * `cascader` 级联选择器
   */
  type: string;

  /**
   * 表单控件显示文字
   */
  label: string;

  /**
   * 表单控件名称（必填且唯一）
   */
  name: string;

  /**
   * 控件是否隐藏
   */
  hidden?: boolean;

  /**
   * 控件是否必填（仅显示，校验请使用 `validators` 属性）
   */
  required?: boolean;

  /**
   * 控件在一行长度占比（最大24）
   */
  span?: number;

  /**
   * 控件文本展示字段占比（最大 24）
   * 在表单配置为 `inline` 或者 `horizontal` 时生效
   */
  itemLabelSpan?: number;

  /**
   * 控件提示
   */
  placeholder?: string;

  /**
   * 是否禁用
   */
  disabled?: boolean;

  /**
   * 控件初始值
   */
  value?: V;

  /**
   * 控件校验函数
   */
  validators?: EzFormValidatorFn[];

  /**
   * 控件值改变 `change` 事件回调
   */
  onChange?: EzFormControlEventFn<C>;
}
